package model;

import java.awt.geom.Point2D;

/**
 *
 * @author Beto
 */
public class GrafoPonderado {

    private double[][] arcos;
    private Point2D[] pontos;
    private int numVertices;

    public GrafoPonderado(Point2D[] pontos) {
        this.arcos = new double[pontos.length][pontos.length];
        this.pontos = pontos;
        this.numVertices = pontos.length;
    }

    public void adicionarArco(int origem, int destino) {
        double peso = Math.hypot(pontos[origem].getX() - pontos[destino].getX(),
                                 pontos[origem].getY() - pontos[destino].getY());

        arcos[origem][destino] = peso;
        arcos[destino][origem] = peso;
    }

    public void removerArco(int origem, int destino) {
        arcos[origem][destino] = 0;
        arcos[destino][origem] = 0;
    }

    public boolean isArco(int origem, int destino) {
        return (arcos[origem][destino] > 0);
    }

    public double getPeso(int origem, int destino) {
        return arcos[origem][destino];
    }

    public int getNumVertices() {
        return numVertices;
    }

    public Point2D getPonto(int vertex) {
        return pontos[vertex];
    }
    
    public int[] vizinhos(int vertex) {
        int count = 0;
        for (int i = 0; i < arcos[vertex].length; i++) {
            if (arcos[vertex][i] > 0) {
                count++;
            }
        }

        final int[] vizinhos = new int[count];
        count = 0;
        for (int i = 0; i < arcos[vertex].length; i++) {
            if (arcos[vertex][i] > 0) {
                vizinhos[count++] = i;
            }
        }
        
        return vizinhos;
    }
}
